另一種常見的模型為分類模型,在分類模型中,資料的label(Y)為離散型,其中又可以分為: 二分類
、多分類
,在介紹分類模型之前,要先來講講當訓練模型完後,會需要進行模型的驗證,看模型準確率是否夠高,或是需要再做修正
under-fitting
)或過度擬合(over-fitting
),所以會在一開始先將資料切割成訓練集
和測試集
,常見的比例為訓練集:測試集=8:2或是7:3,如此一來,可以避免使用同一組資料訓練,又使用同一組資料做測試的有失公平情況出現第一種要介紹的分類模型為邏輯斯迴歸
(logistic regression
) ,是一種二分類的分類模型,在R語言中可以使用glm()
這個函數。
下方舉R內建的資料iris()當作範例,資料中有花萼長度、寬度、花瓣長度、寬度,以及花的品種,我們利用長度寬度來將花的品種做分類(Y),當輸入花的長度、寬度,就可以預測他可能是哪一個品種。
邏輯斯迴歸是二分類方法,在iris()資料中有三種品種,因此我們只取出versicolor、virginica這兩個品種來當訓練資料
# 載入需要用到的套件
library(dplyr) # 資料處理
library(caTools) # 用來切割訓練/測試集
# 載入資料,並取出versicolor、virginica這兩個品種
data(iris)
day24 = iris %>% filter(Species %in% c("versicolor", "virginica"))
# 將Species欄位(label Y)轉為0, 1
day24$Species = ifelse(day24$Species == "versicolor", 1, 0)
# 切割訓練/測試集
split <- sample.split(day24, SplitRatio = 0.8)
train_data <- subset(day24, split == "TRUE")
test_data <- subset(day24, split == "FALSE")
# train model
model_glm = glm(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Length,
data = train_data , family = "binomial")
# 查看模型結果
summary(model_glm)
# predict model
result = predict(model_glm, test_data, type = "response")
由於邏輯斯迴歸
的預測結果為該筆資料label=0以及1分別的機率,因此我們需要設定一個閥值,假設閥值為0.5,代表將資料判給機率大於0.5的那類。
預測完結果可以與真實結果做比對,來了解模型準確率狀況
result = ifelse(result > 0.5, 1, 0)
# 比較模型預測結果與實際狀況
table(predicted = result, actual = test_data$Species)
後續會再介紹判斷模型好壞的一些指標,那我們今天就到這吧